package sort;

/**
 * 选择排序算法
 * (1)首先从原始数组中选择最小的1个数据，将其和位于第1个位置的数据交换
 * (2)接着从剩下的n-1个数据中选择次小的1个元素，将其和第2个位置的数据交换。
 * (3)然后，这样不断重复，直到最后两个数据完成交换。至此，便完成了对原始数组
 * 的从小到大排序.
 * 从小到的选择排序，从第一个数开始到倒数第二个数字
 * 每个数字都要从本身到最后找到本轮的最小值然后放到开始遍历的位置
 * 除了最后一个不用选择外其他的选择完之后从小到大的序列就可以了
 * 比如54321第一轮找到最小的1和5进行交换 第二轮找到最小的2和4交换，以后就一直比较不需要交换了
 */
public class SelectSort {
    public static void main(String[] args){
      selectSort(new int[]{5,4,3,2,1});
    }
     public static void selectSort(int[] array){
         int index,temp;
        for(int i=0;i<array.length-1;i++){
            index=i;//记录每一轮最小值的坐标
            for(int j=i+1;j<array.length;j++){//遍历当前位置到最后的位置找到本轮最小值
                if(array[j]<array[index]){
                    index=j;//每次记录最新的最小值的下标
                }
            }
            //交换两个数--如果说本轮找到的数字不是本轮的第一个进行交换如果是本轮第一个就没必要交换了
            if(index!=i){
                temp=array[i];
                array[i]=array[index];
                array[index]=temp;
            }

            System.out.println("第"+i+"步的排序结果");//然后输出每一步的结果
            for(int h=0;h<array.length;h++){
                System.out.print(" " +array[h]);
            }
            System.out.println("\n");
        }
    }
}
